package cn.bigfire.compiler.dragon.appendixA.handwrite.inter;

import cn.bigfire.compiler.dragon.appendixA.handwrite.lexer.Token;
import cn.bigfire.compiler.dragon.appendixA.handwrite.symbols.Type;

/**
 * 类 Arith 实现了双目 运算
 * <p>
 * 比如 + 和 * 。 构造函数 Arith 首先调用 super(tok,null)( 第 6
 * 行 ), 其中 tok 是一个表示该运算符的词法单元 null 是类型的 占位符 相应的类型在7 行使用函
 * 数 Type.max 来确定 这个 函数检查两运算分量是可 以类型强制一个常见 的数字 类;
 * Type.max 的代码A.4 节中给出 如果它们能够进行自动类型转换 type 就被设置为结果类; 否
 * 则就报告一类型错误(第 8行 ) 这个简单编译器检查类, 但是它并不和人类型转换代码。
 */
public class Arith extends Op {

    public Expr expr1, expr2;



    public Arith(Token token, Expr expr1, Expr expr2) {
        super(token, null);
        this.expr1 = expr1;
        this.expr2 = expr2;
        type = Type.max(expr1.type, expr2.type);

    }
}
